package dao;

import java.sql.*;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class EmpDAO extends BaseDAO {
    public void add(Emp emp)throws ClassNotFoundException, SQLException {
        String sql= "insert into Emp(Empname, sex,birthday,age,deptId) values(?,?,?,?,?)";
        Connection con =null;
        PreparedStatement ps =null;
        try {
            con = this.getCon();
            //预编SQL语句
            ps =con.prepareStatement(sql);
            //设置SQL语句中的参数
            ps.setString(1,emp.getName());
            ps.setString(2,emp.getSex());
            ps.setString(3,emp.getBirthday());
            ps.setInt(4,emp.getAge());
            ps.setInt(5,emp.getDeptId());
            //执行SQL语句
            ps.executeUpdate();
        }finally {
            this.close(con,ps,null);
        }

    }

    public  void delete(int id) throws ClassNotFoundException, SQLException {
        String sql ="delete from Emp where deptId ="+ id;
        Connection con =null;
        Statement st = null;
        try {
            con = this.getCon();
            st = con.createStatement();
            st.executeUpdate(sql);
        }finally {
            this.close(con,st,null);
        }
    }

    public void update(Emp emp)throws ClassNotFoundException, SQLException{
        String sql ="update emp set empname = ? , sex =?,birthday=?,age=?,deptId=?,empid=? ";
        Connection con =null;
        PreparedStatement ps =null;
        try {
            con = this.getCon();
            //预编SQL语句
            ps =con.prepareStatement(sql);
            //设置SQL语句中的参数
            ps.setString(1,emp.getName());
            ps.setString(2,emp.getSex());
            ps.setString(3,emp.getBirthday());
            ps.setInt(4,emp.getAge());
            ps.setInt(5,emp.getDeptId());
            //ps.setInt(6,emp.getId());
            //执行SQL语句
            ps.executeUpdate();
        }finally {
            this.close(con,ps,null);
        }

    }

    //查询所有员工信息的方法
    public List<Emp> findAll()throws SQLException, ClassNotFoundException{
        //数据库的连接对象
        Connection con = null;
        //SQL语句的处理对象
        Statement st = null;
        //保存结果集的对象
        ResultSet rs =null;
        //定义泛型集合，保存结果集中的每一行数据
        List<Emp> list =new ArrayList<Emp>();
        String sql="select * from emp";

        try{
            con =this.getCon();
            st = con.createStatement();
            rs= st.executeQuery(sql);
            //执行SQL语句，并返回结果集
            while(rs.next()){//循环获得结果集中的数据，数据暂时不打印，保存，在main中打印
                //实例化Emp对象，用于保存结果集中每一行的数据
                Emp emp =new Emp(rs.getInt(1),rs.getString(2),rs.getInt(3),rs.getString(4),rs.getString(5));
                //将每一行的数据保存到集合中
                list.add(emp);
            }
        }finally {
            this.close(con,st,null);
        }
        return list;
        }


        //通过姓名查询
        public Emp findByName(String name)throws SQLException, ClassNotFoundException{
            //数据库的连接对象
            Connection con = null;
            //SQL语句的处理对象
            Statement st = null;
            //保存结果集的对象
            ResultSet rs =null;
            Emp emp=null;

            String sql=" select * from emp where empname='"+name+"' ";

            try{
                con =this.getCon();
                st = con.createStatement();
                rs= st.executeQuery(sql);
                //执行SQL语句，并返回结果集
                while(rs.next()){//循环获得结果集中的数据，数据暂时不打印，保存，在main中打印
                    //实例化Emp对象，用于保存结果集中每一行的数据
                     emp =new Emp(rs.getInt(1),rs.getString(2),rs.getInt(3),rs.getString(4),rs.getString(5));
                    //将每一行的数据保存到集合中

                }
            }finally {
                this.close(con,st,null);
            }
            return emp;
        }

        public List<Emp> findByDepId(int deptId)throws SQLException, ClassNotFoundException{
            //数据库的连接对象
            Connection con = null;
            //SQL语句的处理对象
            Statement st = null;
            //保存结果集的对象
            ResultSet rs =null;
            //定义泛型集合，保存结果集中的每一行数据
            List<Emp> list =new ArrayList<Emp>();
            String sql="select * from emp WHERE deptId="+deptId;

            try{
                con =this.getCon();
                st = con.createStatement();
                rs= st.executeQuery(sql);
                //执行SQL语句，并返回结果集
                while(rs.next()){//循环获得结果集中的数据，数据暂时不打印，保存，在main中打印
                    //实例化Emp对象，用于保存结果集中每一行的数据
                    Emp emp =new Emp(rs.getInt(1),rs.getString(2),rs.getInt(3),rs.getString(4),rs.getString(5));
                    //将每一行的数据保存到集合中
                    list.add(emp);
                }
            }finally {
                this.close(con,st,null);
            }
            return list;

        }

        //分页查询  index页数  size行数
        public List<Emp> page(int index,int size)throws SQLException, ClassNotFoundException{
        String sql="select * from emp limit"+(index -1)*size+","+size;
            //数据库的连接对象
            Connection con = null;
            //SQL语句的处理对象
            Statement st = null;
            //保存结果集的对象
            ResultSet rs =null;
            //定义泛型集合，保存结果集中的每一行数据
            List<Emp> list =new ArrayList<Emp>();

            try{
                con =this.getCon();
                st = con.createStatement();
                rs= st.executeQuery(sql);
                //执行SQL语句，并返回结果集
                while(rs.next()){//循环获得结果集中的数据，数据暂时不打印，保存，在main中打印
                    //实例化Emp对象，用于保存结果集中每一行的数据
                    Emp emp =new Emp(rs.getInt(1),rs.getString(2),rs.getInt(3),rs.getString(4),rs.getString(5));
                    //将每一行的数据保存到集合中
                    list.add(emp);
                }
            }finally {
                this.close(con,st,null);
            }
            return list;
        }

}
